﻿using Pattern03工厂方法模式.Interface;
using Pattern03工厂方法模式.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Pattern03工厂方法模式
{
    internal class Client
    {
        /*
    优点：

　　　　（1）工厂方法模式就很好的减轻了工厂类的负担，把某一类/某一种"水果"交由一个工厂生产；（对应简单工厂的缺点1）

　　　　（2）增加某一类"水果"并不需要修改工厂类，只需要添加生产这类"水果"的工厂即可，使得工厂类符合开放-封闭原则。

　　缺点：

　　　　（1）相比简单工厂，实现略复杂。

　　　　（2）对于某些可以形成产品族的情况处理比较复杂。我们可以借用抽象工厂来实现。
    */

        public void Start()
        {
            DoStuff(new AppleFactory().Create());
            DoStuff(new BananaFactory().Create());
            DoStuff(new OrangeFactory().Create());
            DoStuff(new NewFruitFactory().Create());
        }

        private void DoStuff(IFruit fruit)
        {
            fruit.Plant(10);
            fruit.Grow(180);
            Console.WriteLine($"{fruit.GetType().Name}收获:{fruit.Harvest()}");
        }
    }
}
